<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        function f1() {
            var n = 100;
            nAdd = function () {
                n += 1;
            }

            function f2() {
                console.log(n); //100   101
            }
            return f2;
        }
        var result = f1();
        result();
        nAdd();
        result();
        //首先
        // var result = f1();

        // 创建了一个全局的nAdd函数（ 没有var修饰）， 功能是将f1中的n + 1。

        // 而函数f1返回给变量result的内容是

        // function f2() {

        //     alert(n);

        // }

        // 因此执行result()， 会弹出n的值

        // 这里用到了js中的闭包， 外层函数的局部变量如果被内层函数使用， 那么外层函数在返回后， 如果它的内层函数依然可以被访问， 那么外层函数的那个局部变量不会被回收。

        // 因此弹出的n值为100

        // 接着执行了nAdd();

        // 将n的值增加了1， 即101

        // 接着result() 弹出的n值就变成了101
    </script>
</body>

</html>